STM32的boot和app

您所在的位置:网站首页 app 程序 STM32的boot和app

STM32的boot和app

2024-07-15 19:20| 来源: 网络整理| 查看: 265

STM32的内部(FLASH)地址起始于0x08000000,一般情况下,程序就从此地址开始写入。

STM32的微控制器,其内部通过一张“中断向量表”来响应中断。程序启动后,将首先从“中断向量表”取出复位中断向量执行复位中断程序完成启动,而这张“中断向量表”的起始地址是0x08000004,当中断来临,STM32的内部硬件机制亦会自动将PC指针定位到“中断向量表”处,并根据中断源取出对应的中断向量执行中断服务程序。

在上图中,STM32在复位后,先从0x08000004地址取出复位中断向量的地址,并跳转到复位中断服务程序,如图标号①所示;

在复位中断服务程序执行完之后,会跳转到我们的main函数,如图标号②所示;

而我们的main函数一般都是一个死循环,在main函数执行过程中,如果收到中断请求(发生中断),此时STM32强制将PC指针指向中断向量表处,如图标号③所示;

然后根据中断源进入相应的中断服务程序,如图标号④所示;

在执行完中断服务程序以后,程序再次返回main函数执行,如图⑤所示。

试想一下,如果没有中断情况,程序会在MAIN中一直循环执行下去(假设第一次跳转是系统所为,且能正常跳到main中),由于有了中断,程序必须跳转,如果能够通过某种方式,使得程序每次跳转都成功无误,程序也会正确的执行下去。为什么要如此强调中断跳转成功,因为,在后续的升级方案中,就是设置其跳转成功就OK的。

想象一下,我们要对程序升级,并且升级后的程序要正确运行。1、升级过程,芯片本身帮不了你,即升级过程也是开发者自己写的程序来完成的,所以这个地方有一份程序;2、用户应用程序,即真正实现功能的程序,这也是一份程序;这两份程序都在芯片中,在不同情况下,运行不同的程序;

在升级方案里,有把以上两份程序看做一个整体,在开发工程里只用一个工程来开发,然后升级的时候,擦除特定区域,更新特定区域(一般来说是用户应用程序区域),工程本身的中断跳转没有改变,程序能正常运行;

在我的方案里,我把上述两份程序,当做两个工程来开发,即是常见的BOOT区和APP区;正常运行APP区域程序就要用到我上述提到的中断正常跳转。

两个程序都是独立的程序,都有栈顶地址、复位中断向量等;BOOT在程序开始的地址,即0800 0000,运行,而APP在另外一个地址,假定是0808 0000 ———————————————— 版权声明:本文为CSDN博主「Car12」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。 原文链接:https://blog.csdn.net/u010261063/article/details/124234496



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3